1 Data preparation

1.1 Outline

  • Load scripts: loads libraries and useful scripts used in the analyses; all .R files contained in scripts at the root of the factory are automatically loaded

  • Load data: imports datasets, and may contain some ad hoc changes to the data such as specific data cleaning (not used in other reports), new variables used in the analyses, etc.

1.2 Load packages


library(reportfactory)
library(here)
library(rio) 
library(tidyverse)
library(incidence)
library(distcrete)
library(epitrix)
library(earlyR)
library(projections)
library(linelist)
library(remotes)
library(janitor)
library(kableExtra)
library(DT)
library(cyphr)
library(chngpt)
library(lubridate)
library(ggpubr)
library(ggnewscale)

1.3 Load scripts

These scripts will load:

  • all scripts stored as .R files inside /scripts/
  • all scripts stored as .R files inside /src/

These scripts also contain routines to access the latest clean encrypted data (see next section).


reportfactory::rfh_load_scripts()

1.4 Load clean data

We import the latest NHS pathways data:


x <- import_pathways() %>%
  as_tibble()
x
## # A tibble: 186,035 x 11
##    site_type date       sex   age   ccg_code ccg_name count postcode nhs_region
##    <chr>     <date>     <chr> <chr> <chr>    <chr>    <int> <chr>    <chr>     
##  1 111       2020-03-18 fema… miss… e380000… nhs_glo…     1 gl34fe   South West
##  2 111       2020-03-18 fema… miss… e380001… nhs_sou…     1 ne325nn  North Eas…
##  3 111       2020-03-18 fema… 0-18  e380000… nhs_air…     8 bd57jr   North Eas…
##  4 111       2020-03-18 fema… 0-18  e380000… nhs_ash…     7 tn254ab  South East
##  5 111       2020-03-18 fema… 0-18  e380000… nhs_bar…    35 rm13ae   London    
##  6 111       2020-03-18 fema… 0-18  e380000… nhs_bar…     9 n111np   London    
##  7 111       2020-03-18 fema… 0-18  e380000… nhs_bar…    11 s752py   North Eas…
##  8 111       2020-03-18 fema… 0-18  e380000… nhs_bas…    19 ss143hg  East of E…
##  9 111       2020-03-18 fema… 0-18  e380000… nhs_bas…     6 dn227xf  North Eas…
## 10 111       2020-03-18 fema… 0-18  e380000… nhs_bat…     9 ba25rp   South West
## # … with 186,025 more rows, and 2 more variables: day <int>, weekday <fct>

We also import demographics data for NHS regions in England, used later in our analysis:


path <- here::here("data", "csv", "nhs_region_population_2018.csv")
nhs_region_pop <- rio::import(path) %>%
  mutate(nhs_region = str_to_title(gsub("_"," ",nhs_region)))

nhs_region_pop$nhs_region <- gsub(" Of ", " of ", nhs_region_pop$nhs_region)
nhs_region_pop$nhs_region <- gsub(" And ", " and ", nhs_region_pop$nhs_region)
nhs_region_pop
##                  nhs_region variable      value
## 1                North West     0-18 0.22538599
## 2  North East and Yorkshire     0-18 0.21876449
## 3                  Midlands     0-18 0.22564656
## 4           East of England     0-18 0.22810783
## 5                    London     0-18 0.23764782
## 6                South East     0-18 0.22458811
## 7                South West     0-18 0.20799797
## 8                North West    19-69 0.64274078
## 9  North East and Yorkshire    19-69 0.64437753
## 10                 Midlands    19-69 0.63876675
## 11          East of England    19-69 0.63034229
## 12                   London    19-69 0.67820084
## 13               South East    19-69 0.63267336
## 14               South West    19-69 0.63176131
## 15               North West   70-120 0.13187323
## 16 North East and Yorkshire   70-120 0.13685797
## 17                 Midlands   70-120 0.13558669
## 18          East of England   70-120 0.14154988
## 19                   London   70-120 0.08415135
## 20               South East   70-120 0.14273853
## 21               South West   70-120 0.16024072

Finally, we import publically available deaths per NHS region:


dth <- import_deaths() %>%
  mutate(nhs_region = str_to_title(gsub("_"," ",nhs_region)))

#truncation to account for reporting delay
delay_max <- 21

dth$nhs_region <- gsub(" Of ", " of ", dth$nhs_region)
dth$nhs_region <- gsub(" And ", " and ", dth$nhs_region)
dth
##      date_report               nhs_region deaths
## 1     2020-03-01          East of England      0
## 2     2020-03-02          East of England      1
## 3     2020-03-03          East of England      0
## 4     2020-03-04          East of England      0
## 5     2020-03-05          East of England      0
## 6     2020-03-06          East of England      1
## 7     2020-03-07          East of England      0
## 8     2020-03-08          East of England      0
## 9     2020-03-09          East of England      1
## 10    2020-03-10          East of England      0
## 11    2020-03-11          East of England      0
## 12    2020-03-12          East of England      0
## 13    2020-03-13          East of England      1
## 14    2020-03-14          East of England      2
## 15    2020-03-15          East of England      2
## 16    2020-03-16          East of England      1
## 17    2020-03-17          East of England      1
## 18    2020-03-18          East of England      5
## 19    2020-03-19          East of England      4
## 20    2020-03-20          East of England      2
## 21    2020-03-21          East of England     11
## 22    2020-03-22          East of England     12
## 23    2020-03-23          East of England     11
## 24    2020-03-24          East of England     19
## 25    2020-03-25          East of England     26
## 26    2020-03-26          East of England     36
## 27    2020-03-27          East of England     38
## 28    2020-03-28          East of England     28
## 29    2020-03-29          East of England     43
## 30    2020-03-30          East of England     45
## 31    2020-03-31          East of England     70
## 32    2020-04-01          East of England     62
## 33    2020-04-02          East of England     65
## 34    2020-04-03          East of England     80
## 35    2020-04-04          East of England     71
## 36    2020-04-05          East of England     76
## 37    2020-04-06          East of England     71
## 38    2020-04-07          East of England     93
## 39    2020-04-08          East of England    111
## 40    2020-04-09          East of England     87
## 41    2020-04-10          East of England     74
## 42    2020-04-11          East of England     92
## 43    2020-04-12          East of England    100
## 44    2020-04-13          East of England     78
## 45    2020-04-14          East of England     61
## 46    2020-04-15          East of England     82
## 47    2020-04-16          East of England     74
## 48    2020-04-17          East of England     86
## 49    2020-04-18          East of England     64
## 50    2020-04-19          East of England     67
## 51    2020-04-20          East of England     67
## 52    2020-04-21          East of England     75
## 53    2020-04-22          East of England     67
## 54    2020-04-23          East of England     49
## 55    2020-04-24          East of England     66
## 56    2020-04-25          East of England     54
## 57    2020-04-26          East of England     48
## 58    2020-04-27          East of England     46
## 59    2020-04-28          East of England     58
## 60    2020-04-29          East of England     32
## 61    2020-04-30          East of England     45
## 62    2020-05-01          East of England     49
## 63    2020-05-02          East of England     29
## 64    2020-05-03          East of England     41
## 65    2020-05-04          East of England     19
## 66    2020-05-05          East of England     36
## 67    2020-05-06          East of England     31
## 68    2020-05-07          East of England     33
## 69    2020-05-08          East of England     33
## 70    2020-05-09          East of England     29
## 71    2020-05-10          East of England     22
## 72    2020-05-11          East of England     18
## 73    2020-05-12          East of England     21
## 74    2020-05-13          East of England     27
## 75    2020-05-14          East of England     26
## 76    2020-05-15          East of England     19
## 77    2020-05-16          East of England     26
## 78    2020-05-17          East of England     17
## 79    2020-05-18          East of England     25
## 80    2020-05-19          East of England     15
## 81    2020-05-20          East of England     26
## 82    2020-05-21          East of England     21
## 83    2020-05-22          East of England     13
## 84    2020-05-23          East of England     12
## 85    2020-05-24          East of England     17
## 86    2020-05-25          East of England     25
## 87    2020-05-26          East of England     14
## 88    2020-05-27          East of England     12
## 89    2020-05-28          East of England     17
## 90    2020-05-29          East of England     16
## 91    2020-05-30          East of England      9
## 92    2020-05-31          East of England      8
## 93    2020-06-01          East of England     17
## 94    2020-06-02          East of England     14
## 95    2020-06-03          East of England     10
## 96    2020-06-04          East of England      7
## 97    2020-06-05          East of England     14
## 98    2020-06-06          East of England      5
## 99    2020-06-07          East of England      9
## 100   2020-06-08          East of England      7
## 101   2020-06-09          East of England      6
## 102   2020-06-10          East of England      8
## 103   2020-06-11          East of England      1
## 104   2020-06-12          East of England      9
## 105   2020-06-13          East of England      5
## 106   2020-06-14          East of England      4
## 107   2020-06-15          East of England      8
## 108   2020-06-16          East of England      3
## 109   2020-06-17          East of England      7
## 110   2020-06-18          East of England      4
## 111   2020-06-19          East of England      7
## 112   2020-06-20          East of England      4
## 113   2020-06-21          East of England      3
## 114   2020-06-22          East of England      6
## 115   2020-06-23          East of England      5
## 116   2020-06-24          East of England      4
## 117   2020-06-25          East of England      1
## 118   2020-06-26          East of England      5
## 119   2020-06-27          East of England      6
## 120   2020-06-28          East of England      8
## 121   2020-06-29          East of England      4
## 122   2020-06-30          East of England      5
## 123   2020-07-01          East of England      2
## 124   2020-07-02          East of England      5
## 125   2020-07-03          East of England      0
## 126   2020-07-04          East of England      3
## 127   2020-07-05          East of England      1
## 128   2020-07-06          East of England      2
## 129   2020-07-07          East of England      2
## 130   2020-07-08          East of England      0
## 131   2020-07-09          East of England      8
## 132   2020-07-10          East of England      4
## 133   2020-07-11          East of England      2
## 134   2020-07-12          East of England      1
## 135   2020-07-13          East of England      7
## 136   2020-07-14          East of England      2
## 137   2020-07-15          East of England      0
## 138   2020-07-16          East of England      0
## 139   2020-07-17          East of England      0
## 140   2020-07-18          East of England      0
## 141   2020-07-19          East of England      1
## 142   2020-07-20          East of England      1
## 143   2020-07-21          East of England      0
## 144   2020-07-22          East of England      0
## 145   2020-07-23          East of England      0
## 146   2020-03-01                   London      0
## 147   2020-03-02                   London      0
## 148   2020-03-03                   London      0
## 149   2020-03-04                   London      0
## 150   2020-03-05                   London      0
## 151   2020-03-06                   London      1
## 152   2020-03-07                   London      0
## 153   2020-03-08                   London      0
## 154   2020-03-09                   London      1
## 155   2020-03-10                   London      0
## 156   2020-03-11                   London      5
## 157   2020-03-12                   London      6
## 158   2020-03-13                   London     10
## 159   2020-03-14                   London     13
## 160   2020-03-15                   London      9
## 161   2020-03-16                   London     15
## 162   2020-03-17                   London     23
## 163   2020-03-18                   London     27
## 164   2020-03-19                   London     25
## 165   2020-03-20                   London     44
## 166   2020-03-21                   London     49
## 167   2020-03-22                   London     54
## 168   2020-03-23                   London     63
## 169   2020-03-24                   London     86
## 170   2020-03-25                   London    112
## 171   2020-03-26                   London    129
## 172   2020-03-27                   London    129
## 173   2020-03-28                   London    122
## 174   2020-03-29                   London    145
## 175   2020-03-30                   London    149
## 176   2020-03-31                   London    181
## 177   2020-04-01                   London    202
## 178   2020-04-02                   London    191
## 179   2020-04-03                   London    196
## 180   2020-04-04                   London    230
## 181   2020-04-05                   London    195
## 182   2020-04-06                   London    197
## 183   2020-04-07                   London    220
## 184   2020-04-08                   London    238
## 185   2020-04-09                   London    206
## 186   2020-04-10                   London    170
## 187   2020-04-11                   London    178
## 188   2020-04-12                   London    158
## 189   2020-04-13                   London    166
## 190   2020-04-14                   London    143
## 191   2020-04-15                   London    142
## 192   2020-04-16                   London    140
## 193   2020-04-17                   London    100
## 194   2020-04-18                   London    101
## 195   2020-04-19                   London    103
## 196   2020-04-20                   London     95
## 197   2020-04-21                   London     94
## 198   2020-04-22                   London    109
## 199   2020-04-23                   London     77
## 200   2020-04-24                   London     71
## 201   2020-04-25                   London     58
## 202   2020-04-26                   London     53
## 203   2020-04-27                   London     51
## 204   2020-04-28                   London     44
## 205   2020-04-29                   London     45
## 206   2020-04-30                   London     40
## 207   2020-05-01                   London     41
## 208   2020-05-02                   London     41
## 209   2020-05-03                   London     36
## 210   2020-05-04                   London     30
## 211   2020-05-05                   London     25
## 212   2020-05-06                   London     37
## 213   2020-05-07                   London     37
## 214   2020-05-08                   London     30
## 215   2020-05-09                   London     23
## 216   2020-05-10                   London     26
## 217   2020-05-11                   London     18
## 218   2020-05-12                   London     18
## 219   2020-05-13                   London     17
## 220   2020-05-14                   London     20
## 221   2020-05-15                   London     18
## 222   2020-05-16                   London     14
## 223   2020-05-17                   London     15
## 224   2020-05-18                   London     10
## 225   2020-05-19                   London     14
## 226   2020-05-20                   London     19
## 227   2020-05-21                   London     12
## 228   2020-05-22                   London     10
## 229   2020-05-23                   London      6
## 230   2020-05-24                   London      7
## 231   2020-05-25                   London      9
## 232   2020-05-26                   London     13
## 233   2020-05-27                   London      7
## 234   2020-05-28                   London      8
## 235   2020-05-29                   London      7
## 236   2020-05-30                   London     12
## 237   2020-05-31                   London      6
## 238   2020-06-01                   London     10
## 239   2020-06-02                   London      8
## 240   2020-06-03                   London      6
## 241   2020-06-04                   London      8
## 242   2020-06-05                   London      4
## 243   2020-06-06                   London      0
## 244   2020-06-07                   London      5
## 245   2020-06-08                   London      5
## 246   2020-06-09                   London      4
## 247   2020-06-10                   London      7
## 248   2020-06-11                   London      5
## 249   2020-06-12                   London      3
## 250   2020-06-13                   London      3
## 251   2020-06-14                   London      3
## 252   2020-06-15                   London      1
## 253   2020-06-16                   London      2
## 254   2020-06-17                   London      1
## 255   2020-06-18                   London      2
## 256   2020-06-19                   London      5
## 257   2020-06-20                   London      3
## 258   2020-06-21                   London      4
## 259   2020-06-22                   London      2
## 260   2020-06-23                   London      1
## 261   2020-06-24                   London      4
## 262   2020-06-25                   London      3
## 263   2020-06-26                   London      2
## 264   2020-06-27                   London      1
## 265   2020-06-28                   London      2
## 266   2020-06-29                   London      2
## 267   2020-06-30                   London      1
## 268   2020-07-01                   London      2
## 269   2020-07-02                   London      2
## 270   2020-07-03                   London      2
## 271   2020-07-04                   London      1
## 272   2020-07-05                   London      3
## 273   2020-07-06                   London      2
## 274   2020-07-07                   London      1
## 275   2020-07-08                   London      3
## 276   2020-07-09                   London      4
## 277   2020-07-10                   London      0
## 278   2020-07-11                   London      1
## 279   2020-07-12                   London      1
## 280   2020-07-13                   London      1
## 281   2020-07-14                   London      0
## 282   2020-07-15                   London      2
## 283   2020-07-16                   London      0
## 284   2020-07-17                   London      0
## 285   2020-07-18                   London      1
## 286   2020-07-19                   London      0
## 287   2020-07-20                   London      0
## 288   2020-07-21                   London      0
## 289   2020-07-22                   London      0
## 290   2020-07-23                   London      0
## 291   2020-03-01                 Midlands      0
## 292   2020-03-02                 Midlands      0
## 293   2020-03-03                 Midlands      1
## 294   2020-03-04                 Midlands      0
## 295   2020-03-05                 Midlands      0
## 296   2020-03-06                 Midlands      0
## 297   2020-03-07                 Midlands      0
## 298   2020-03-08                 Midlands      2
## 299   2020-03-09                 Midlands      1
## 300   2020-03-10                 Midlands      0
## 301   2020-03-11                 Midlands      2
## 302   2020-03-12                 Midlands      6
## 303   2020-03-13                 Midlands      5
## 304   2020-03-14                 Midlands      4
## 305   2020-03-15                 Midlands      5
## 306   2020-03-16                 Midlands     11
## 307   2020-03-17                 Midlands      8
## 308   2020-03-18                 Midlands     13
## 309   2020-03-19                 Midlands      8
## 310   2020-03-20                 Midlands     28
## 311   2020-03-21                 Midlands     13
## 312   2020-03-22                 Midlands     31
## 313   2020-03-23                 Midlands     33
## 314   2020-03-24                 Midlands     41
## 315   2020-03-25                 Midlands     48
## 316   2020-03-26                 Midlands     64
## 317   2020-03-27                 Midlands     72
## 318   2020-03-28                 Midlands     89
## 319   2020-03-29                 Midlands     92
## 320   2020-03-30                 Midlands     90
## 321   2020-03-31                 Midlands    123
## 322   2020-04-01                 Midlands    140
## 323   2020-04-02                 Midlands    142
## 324   2020-04-03                 Midlands    124
## 325   2020-04-04                 Midlands    151
## 326   2020-04-05                 Midlands    164
## 327   2020-04-06                 Midlands    140
## 328   2020-04-07                 Midlands    123
## 329   2020-04-08                 Midlands    186
## 330   2020-04-09                 Midlands    139
## 331   2020-04-10                 Midlands    127
## 332   2020-04-11                 Midlands    142
## 333   2020-04-12                 Midlands    139
## 334   2020-04-13                 Midlands    120
## 335   2020-04-14                 Midlands    116
## 336   2020-04-15                 Midlands    147
## 337   2020-04-16                 Midlands    102
## 338   2020-04-17                 Midlands    118
## 339   2020-04-18                 Midlands    115
## 340   2020-04-19                 Midlands     92
## 341   2020-04-20                 Midlands    107
## 342   2020-04-21                 Midlands     86
## 343   2020-04-22                 Midlands     78
## 344   2020-04-23                 Midlands    103
## 345   2020-04-24                 Midlands     79
## 346   2020-04-25                 Midlands     72
## 347   2020-04-26                 Midlands     81
## 348   2020-04-27                 Midlands     74
## 349   2020-04-28                 Midlands     68
## 350   2020-04-29                 Midlands     53
## 351   2020-04-30                 Midlands     56
## 352   2020-05-01                 Midlands     64
## 353   2020-05-02                 Midlands     51
## 354   2020-05-03                 Midlands     52
## 355   2020-05-04                 Midlands     61
## 356   2020-05-05                 Midlands     59
## 357   2020-05-06                 Midlands     59
## 358   2020-05-07                 Midlands     48
## 359   2020-05-08                 Midlands     34
## 360   2020-05-09                 Midlands     37
## 361   2020-05-10                 Midlands     42
## 362   2020-05-11                 Midlands     33
## 363   2020-05-12                 Midlands     45
## 364   2020-05-13                 Midlands     40
## 365   2020-05-14                 Midlands     38
## 366   2020-05-15                 Midlands     40
## 367   2020-05-16                 Midlands     34
## 368   2020-05-17                 Midlands     31
## 369   2020-05-18                 Midlands     36
## 370   2020-05-19                 Midlands     35
## 371   2020-05-20                 Midlands     36
## 372   2020-05-21                 Midlands     32
## 373   2020-05-22                 Midlands     27
## 374   2020-05-23                 Midlands     34
## 375   2020-05-24                 Midlands     20
## 376   2020-05-25                 Midlands     26
## 377   2020-05-26                 Midlands     33
## 378   2020-05-27                 Midlands     29
## 379   2020-05-28                 Midlands     28
## 380   2020-05-29                 Midlands     20
## 381   2020-05-30                 Midlands     21
## 382   2020-05-31                 Midlands     22
## 383   2020-06-01                 Midlands     20
## 384   2020-06-02                 Midlands     22
## 385   2020-06-03                 Midlands     24
## 386   2020-06-04                 Midlands     16
## 387   2020-06-05                 Midlands     21
## 388   2020-06-06                 Midlands     20
## 389   2020-06-07                 Midlands     17
## 390   2020-06-08                 Midlands     16
## 391   2020-06-09                 Midlands     18
## 392   2020-06-10                 Midlands     15
## 393   2020-06-11                 Midlands     13
## 394   2020-06-12                 Midlands     12
## 395   2020-06-13                 Midlands      6
## 396   2020-06-14                 Midlands     18
## 397   2020-06-15                 Midlands     12
## 398   2020-06-16                 Midlands     15
## 399   2020-06-17                 Midlands     11
## 400   2020-06-18                 Midlands     15
## 401   2020-06-19                 Midlands     10
## 402   2020-06-20                 Midlands     15
## 403   2020-06-21                 Midlands     14
## 404   2020-06-22                 Midlands     14
## 405   2020-06-23                 Midlands     16
## 406   2020-06-24                 Midlands     15
## 407   2020-06-25                 Midlands     18
## 408   2020-06-26                 Midlands      5
## 409   2020-06-27                 Midlands      5
## 410   2020-06-28                 Midlands      7
## 411   2020-06-29                 Midlands      6
## 412   2020-06-30                 Midlands      6
## 413   2020-07-01                 Midlands      7
## 414   2020-07-02                 Midlands      9
## 415   2020-07-03                 Midlands      3
## 416   2020-07-04                 Midlands      4
## 417   2020-07-05                 Midlands      6
## 418   2020-07-06                 Midlands      5
## 419   2020-07-07                 Midlands      3
## 420   2020-07-08                 Midlands      5
## 421   2020-07-09                 Midlands      8
## 422   2020-07-10                 Midlands      3
## 423   2020-07-11                 Midlands      0
## 424   2020-07-12                 Midlands      5
## 425   2020-07-13                 Midlands      1
## 426   2020-07-14                 Midlands      1
## 427   2020-07-15                 Midlands      6
## 428   2020-07-16                 Midlands      2
## 429   2020-07-17                 Midlands      2
## 430   2020-07-18                 Midlands      2
## 431   2020-07-19                 Midlands      3
## 432   2020-07-20                 Midlands      2
## 433   2020-07-21                 Midlands      0
## 434   2020-07-22                 Midlands      2
## 435   2020-07-23                 Midlands      0
## 436   2020-03-01 North East and Yorkshire      0
## 437   2020-03-02 North East and Yorkshire      0
## 438   2020-03-03 North East and Yorkshire      0
## 439   2020-03-04 North East and Yorkshire      0
## 440   2020-03-05 North East and Yorkshire      0
## 441   2020-03-06 North East and Yorkshire      0
## 442   2020-03-07 North East and Yorkshire      0
## 443   2020-03-08 North East and Yorkshire      0
## 444   2020-03-09 North East and Yorkshire      0
## 445   2020-03-10 North East and Yorkshire      0
## 446   2020-03-11 North East and Yorkshire      0
## 447   2020-03-12 North East and Yorkshire      0
## 448   2020-03-13 North East and Yorkshire      0
## 449   2020-03-14 North East and Yorkshire      0
## 450   2020-03-15 North East and Yorkshire      2
## 451   2020-03-16 North East and Yorkshire      3
## 452   2020-03-17 North East and Yorkshire      1
## 453   2020-03-18 North East and Yorkshire      2
## 454   2020-03-19 North East and Yorkshire      6
## 455   2020-03-20 North East and Yorkshire      5
## 456   2020-03-21 North East and Yorkshire      6
## 457   2020-03-22 North East and Yorkshire      7
## 458   2020-03-23 North East and Yorkshire      9
## 459   2020-03-24 North East and Yorkshire      8
## 460   2020-03-25 North East and Yorkshire     18
## 461   2020-03-26 North East and Yorkshire     21
## 462   2020-03-27 North East and Yorkshire     28
## 463   2020-03-28 North East and Yorkshire     35
## 464   2020-03-29 North East and Yorkshire     38
## 465   2020-03-30 North East and Yorkshire     64
## 466   2020-03-31 North East and Yorkshire     60
## 467   2020-04-01 North East and Yorkshire     67
## 468   2020-04-02 North East and Yorkshire     75
## 469   2020-04-03 North East and Yorkshire    100
## 470   2020-04-04 North East and Yorkshire    105
## 471   2020-04-05 North East and Yorkshire     92
## 472   2020-04-06 North East and Yorkshire     96
## 473   2020-04-07 North East and Yorkshire    102
## 474   2020-04-08 North East and Yorkshire    107
## 475   2020-04-09 North East and Yorkshire    111
## 476   2020-04-10 North East and Yorkshire    117
## 477   2020-04-11 North East and Yorkshire     98
## 478   2020-04-12 North East and Yorkshire     84
## 479   2020-04-13 North East and Yorkshire     94
## 480   2020-04-14 North East and Yorkshire    107
## 481   2020-04-15 North East and Yorkshire     96
## 482   2020-04-16 North East and Yorkshire    103
## 483   2020-04-17 North East and Yorkshire     88
## 484   2020-04-18 North East and Yorkshire     95
## 485   2020-04-19 North East and Yorkshire     88
## 486   2020-04-20 North East and Yorkshire    100
## 487   2020-04-21 North East and Yorkshire     76
## 488   2020-04-22 North East and Yorkshire     84
## 489   2020-04-23 North East and Yorkshire     63
## 490   2020-04-24 North East and Yorkshire     72
## 491   2020-04-25 North East and Yorkshire     69
## 492   2020-04-26 North East and Yorkshire     65
## 493   2020-04-27 North East and Yorkshire     65
## 494   2020-04-28 North East and Yorkshire     57
## 495   2020-04-29 North East and Yorkshire     69
## 496   2020-04-30 North East and Yorkshire     57
## 497   2020-05-01 North East and Yorkshire     64
## 498   2020-05-02 North East and Yorkshire     48
## 499   2020-05-03 North East and Yorkshire     40
## 500   2020-05-04 North East and Yorkshire     49
## 501   2020-05-05 North East and Yorkshire     40
## 502   2020-05-06 North East and Yorkshire     51
## 503   2020-05-07 North East and Yorkshire     45
## 504   2020-05-08 North East and Yorkshire     42
## 505   2020-05-09 North East and Yorkshire     44
## 506   2020-05-10 North East and Yorkshire     40
## 507   2020-05-11 North East and Yorkshire     29
## 508   2020-05-12 North East and Yorkshire     27
## 509   2020-05-13 North East and Yorkshire     28
## 510   2020-05-14 North East and Yorkshire     31
## 511   2020-05-15 North East and Yorkshire     32
## 512   2020-05-16 North East and Yorkshire     35
## 513   2020-05-17 North East and Yorkshire     26
## 514   2020-05-18 North East and Yorkshire     30
## 515   2020-05-19 North East and Yorkshire     27
## 516   2020-05-20 North East and Yorkshire     22
## 517   2020-05-21 North East and Yorkshire     33
## 518   2020-05-22 North East and Yorkshire     22
## 519   2020-05-23 North East and Yorkshire     18
## 520   2020-05-24 North East and Yorkshire     26
## 521   2020-05-25 North East and Yorkshire     21
## 522   2020-05-26 North East and Yorkshire     21
## 523   2020-05-27 North East and Yorkshire     22
## 524   2020-05-28 North East and Yorkshire     21
## 525   2020-05-29 North East and Yorkshire     25
## 526   2020-05-30 North East and Yorkshire     20
## 527   2020-05-31 North East and Yorkshire     20
## 528   2020-06-01 North East and Yorkshire     17
## 529   2020-06-02 North East and Yorkshire     23
## 530   2020-06-03 North East and Yorkshire     23
## 531   2020-06-04 North East and Yorkshire     17
## 532   2020-06-05 North East and Yorkshire     18
## 533   2020-06-06 North East and Yorkshire     21
## 534   2020-06-07 North East and Yorkshire     14
## 535   2020-06-08 North East and Yorkshire     11
## 536   2020-06-09 North East and Yorkshire     12
## 537   2020-06-10 North East and Yorkshire     19
## 538   2020-06-11 North East and Yorkshire      7
## 539   2020-06-12 North East and Yorkshire      9
## 540   2020-06-13 North East and Yorkshire     10
## 541   2020-06-14 North East and Yorkshire     11
## 542   2020-06-15 North East and Yorkshire      9
## 543   2020-06-16 North East and Yorkshire     10
## 544   2020-06-17 North East and Yorkshire      9
## 545   2020-06-18 North East and Yorkshire     11
## 546   2020-06-19 North East and Yorkshire      6
## 547   2020-06-20 North East and Yorkshire      5
## 548   2020-06-21 North East and Yorkshire      4
## 549   2020-06-22 North East and Yorkshire      7
## 550   2020-06-23 North East and Yorkshire      7
## 551   2020-06-24 North East and Yorkshire     10
## 552   2020-06-25 North East and Yorkshire      4
## 553   2020-06-26 North East and Yorkshire      7
## 554   2020-06-27 North East and Yorkshire      3
## 555   2020-06-28 North East and Yorkshire      5
## 556   2020-06-29 North East and Yorkshire      2
## 557   2020-06-30 North East and Yorkshire      5
## 558   2020-07-01 North East and Yorkshire      1
## 559   2020-07-02 North East and Yorkshire      4
## 560   2020-07-03 North East and Yorkshire      4
## 561   2020-07-04 North East and Yorkshire      4
## 562   2020-07-05 North East and Yorkshire      2
## 563   2020-07-06 North East and Yorkshire      2
## 564   2020-07-07 North East and Yorkshire      3
## 565   2020-07-08 North East and Yorkshire      3
## 566   2020-07-09 North East and Yorkshire      0
## 567   2020-07-10 North East and Yorkshire      3
## 568   2020-07-11 North East and Yorkshire      1
## 569   2020-07-12 North East and Yorkshire      4
## 570   2020-07-13 North East and Yorkshire      1
## 571   2020-07-14 North East and Yorkshire      1
## 572   2020-07-15 North East and Yorkshire      2
## 573   2020-07-16 North East and Yorkshire      2
## 574   2020-07-17 North East and Yorkshire      1
## 575   2020-07-18 North East and Yorkshire      2
## 576   2020-07-19 North East and Yorkshire      2
## 577   2020-07-20 North East and Yorkshire      1
## 578   2020-07-21 North East and Yorkshire      1
## 579   2020-07-22 North East and Yorkshire      4
## 580   2020-07-23 North East and Yorkshire      0
## 581   2020-03-01               North West      0
## 582   2020-03-02               North West      0
## 583   2020-03-03               North West      0
## 584   2020-03-04               North West      0
## 585   2020-03-05               North West      1
## 586   2020-03-06               North West      0
## 587   2020-03-07               North West      0
## 588   2020-03-08               North West      1
## 589   2020-03-09               North West      0
## 590   2020-03-10               North West      0
## 591   2020-03-11               North West      0
## 592   2020-03-12               North West      2
## 593   2020-03-13               North West      3
## 594   2020-03-14               North West      1
## 595   2020-03-15               North West      4
## 596   2020-03-16               North West      2
## 597   2020-03-17               North West      4
## 598   2020-03-18               North West      6
## 599   2020-03-19               North West      7
## 600   2020-03-20               North West     10
## 601   2020-03-21               North West     11
## 602   2020-03-22               North West     13
## 603   2020-03-23               North West     15
## 604   2020-03-24               North West     21
## 605   2020-03-25               North West     21
## 606   2020-03-26               North West     29
## 607   2020-03-27               North West     36
## 608   2020-03-28               North West     28
## 609   2020-03-29               North West     46
## 610   2020-03-30               North West     67
## 611   2020-03-31               North West     52
## 612   2020-04-01               North West     86
## 613   2020-04-02               North West     96
## 614   2020-04-03               North West     95
## 615   2020-04-04               North West     98
## 616   2020-04-05               North West    102
## 617   2020-04-06               North West    100
## 618   2020-04-07               North West    135
## 619   2020-04-08               North West    127
## 620   2020-04-09               North West    119
## 621   2020-04-10               North West    117
## 622   2020-04-11               North West    138
## 623   2020-04-12               North West    125
## 624   2020-04-13               North West    129
## 625   2020-04-14               North West    131
## 626   2020-04-15               North West    114
## 627   2020-04-16               North West    135
## 628   2020-04-17               North West     98
## 629   2020-04-18               North West    113
## 630   2020-04-19               North West     71
## 631   2020-04-20               North West     83
## 632   2020-04-21               North West     76
## 633   2020-04-22               North West     86
## 634   2020-04-23               North West     85
## 635   2020-04-24               North West     66
## 636   2020-04-25               North West     66
## 637   2020-04-26               North West     55
## 638   2020-04-27               North West     54
## 639   2020-04-28               North West     57
## 640   2020-04-29               North West     63
## 641   2020-04-30               North West     59
## 642   2020-05-01               North West     45
## 643   2020-05-02               North West     56
## 644   2020-05-03               North West     55
## 645   2020-05-04               North West     48
## 646   2020-05-05               North West     48
## 647   2020-05-06               North West     44
## 648   2020-05-07               North West     49
## 649   2020-05-08               North West     42
## 650   2020-05-09               North West     31
## 651   2020-05-10               North West     42
## 652   2020-05-11               North West     35
## 653   2020-05-12               North West     38
## 654   2020-05-13               North West     25
## 655   2020-05-14               North West     26
## 656   2020-05-15               North West     33
## 657   2020-05-16               North West     32
## 658   2020-05-17               North West     24
## 659   2020-05-18               North West     31
## 660   2020-05-19               North West     35
## 661   2020-05-20               North West     27
## 662   2020-05-21               North West     27
## 663   2020-05-22               North West     26
## 664   2020-05-23               North West     31
## 665   2020-05-24               North West     26
## 666   2020-05-25               North West     31
## 667   2020-05-26               North West     27
## 668   2020-05-27               North West     27
## 669   2020-05-28               North West     28
## 670   2020-05-29               North West     20
## 671   2020-05-30               North West     19
## 672   2020-05-31               North West     13
## 673   2020-06-01               North West     12
## 674   2020-06-02               North West     27
## 675   2020-06-03               North West     22
## 676   2020-06-04               North West     22
## 677   2020-06-05               North West     16
## 678   2020-06-06               North West     26
## 679   2020-06-07               North West     20
## 680   2020-06-08               North West     23
## 681   2020-06-09               North West     17
## 682   2020-06-10               North West     16
## 683   2020-06-11               North West     16
## 684   2020-06-12               North West     11
## 685   2020-06-13               North West     10
## 686   2020-06-14               North West     15
## 687   2020-06-15               North West     16
## 688   2020-06-16               North West     15
## 689   2020-06-17               North West     13
## 690   2020-06-18               North West     14
## 691   2020-06-19               North West      7
## 692   2020-06-20               North West     11
## 693   2020-06-21               North West      8
## 694   2020-06-22               North West     11
## 695   2020-06-23               North West     13
## 696   2020-06-24               North West     13
## 697   2020-06-25               North West     15
## 698   2020-06-26               North West      6
## 699   2020-06-27               North West      7
## 700   2020-06-28               North West      9
## 701   2020-06-29               North West      9
## 702   2020-06-30               North West      7
## 703   2020-07-01               North West      3
## 704   2020-07-02               North West      6
## 705   2020-07-03               North West      7
## 706   2020-07-04               North West      4
## 707   2020-07-05               North West      6
## 708   2020-07-06               North West      9
## 709   2020-07-07               North West      8
## 710   2020-07-08               North West      5
## 711   2020-07-09               North West     10
## 712   2020-07-10               North West      2
## 713   2020-07-11               North West      4
## 714   2020-07-12               North West      0
## 715   2020-07-13               North West      6
## 716   2020-07-14               North West      4
## 717   2020-07-15               North West      5
## 718   2020-07-16               North West      2
## 719   2020-07-17               North West      4
## 720   2020-07-18               North West      2
## 721   2020-07-19               North West      2
## 722   2020-07-20               North West      0
## 723   2020-07-21               North West      1
## 724   2020-07-22               North West      0
## 725   2020-07-23               North West      0
## 726   2020-03-01               South East      0
## 727   2020-03-02               South East      0
## 728   2020-03-03               South East      1
## 729   2020-03-04               South East      0
## 730   2020-03-05               South East      1
## 731   2020-03-06               South East      0
## 732   2020-03-07               South East      0
## 733   2020-03-08               South East      1
## 734   2020-03-09               South East      1
## 735   2020-03-10               South East      1
## 736   2020-03-11               South East      1
## 737   2020-03-12               South East      0
## 738   2020-03-13               South East      1
## 739   2020-03-14               South East      1
## 740   2020-03-15               South East      5
## 741   2020-03-16               South East      8
## 742   2020-03-17               South East      7
## 743   2020-03-18               South East     10
## 744   2020-03-19               South East      9
## 745   2020-03-20               South East     13
## 746   2020-03-21               South East      7
## 747   2020-03-22               South East     25
## 748   2020-03-23               South East     20
## 749   2020-03-24               South East     22
## 750   2020-03-25               South East     29
## 751   2020-03-26               South East     35
## 752   2020-03-27               South East     34
## 753   2020-03-28               South East     36
## 754   2020-03-29               South East     55
## 755   2020-03-30               South East     58
## 756   2020-03-31               South East     65
## 757   2020-04-01               South East     66
## 758   2020-04-02               South East     55
## 759   2020-04-03               South East     72
## 760   2020-04-04               South East     80
## 761   2020-04-05               South East     82
## 762   2020-04-06               South East     88
## 763   2020-04-07               South East    100
## 764   2020-04-08               South East     83
## 765   2020-04-09               South East    104
## 766   2020-04-10               South East     88
## 767   2020-04-11               South East     88
## 768   2020-04-12               South East     88
## 769   2020-04-13               South East     84
## 770   2020-04-14               South East     65
## 771   2020-04-15               South East     72
## 772   2020-04-16               South East     56
## 773   2020-04-17               South East     86
## 774   2020-04-18               South East     57
## 775   2020-04-19               South East     70
## 776   2020-04-20               South East     87
## 777   2020-04-21               South East     51
## 778   2020-04-22               South East     54
## 779   2020-04-23               South East     57
## 780   2020-04-24               South East     64
## 781   2020-04-25               South East     51
## 782   2020-04-26               South East     51
## 783   2020-04-27               South East     41
## 784   2020-04-28               South East     40
## 785   2020-04-29               South East     47
## 786   2020-04-30               South East     29
## 787   2020-05-01               South East     37
## 788   2020-05-02               South East     36
## 789   2020-05-03               South East     17
## 790   2020-05-04               South East     35
## 791   2020-05-05               South East     29
## 792   2020-05-06               South East     25
## 793   2020-05-07               South East     27
## 794   2020-05-08               South East     26
## 795   2020-05-09               South East     28
## 796   2020-05-10               South East     19
## 797   2020-05-11               South East     25
## 798   2020-05-12               South East     27
## 799   2020-05-13               South East     18
## 800   2020-05-14               South East     32
## 801   2020-05-15               South East     25
## 802   2020-05-16               South East     22
## 803   2020-05-17               South East     18
## 804   2020-05-18               South East     22
## 805   2020-05-19               South East     12
## 806   2020-05-20               South East     22
## 807   2020-05-21               South East     15
## 808   2020-05-22               South East     17
## 809   2020-05-23               South East     21
## 810   2020-05-24               South East     17
## 811   2020-05-25               South East     13
## 812   2020-05-26               South East     19
## 813   2020-05-27               South East     18
## 814   2020-05-28               South East     12
## 815   2020-05-29               South East     21
## 816   2020-05-30               South East      8
## 817   2020-05-31               South East     12
## 818   2020-06-01               South East     11
## 819   2020-06-02               South East     13
## 820   2020-06-03               South East     18
## 821   2020-06-04               South East     11
## 822   2020-06-05               South East     11
## 823   2020-06-06               South East     10
## 824   2020-06-07               South East     12
## 825   2020-06-08               South East      8
## 826   2020-06-09               South East     10
## 827   2020-06-10               South East     11
## 828   2020-06-11               South East      5
## 829   2020-06-12               South East      6
## 830   2020-06-13               South East      7
## 831   2020-06-14               South East      7
## 832   2020-06-15               South East      8
## 833   2020-06-16               South East     13
## 834   2020-06-17               South East      9
## 835   2020-06-18               South East      4
## 836   2020-06-19               South East      7
## 837   2020-06-20               South East      5
## 838   2020-06-21               South East      3
## 839   2020-06-22               South East      2
## 840   2020-06-23               South East      8
## 841   2020-06-24               South East      7
## 842   2020-06-25               South East      5
## 843   2020-06-26               South East      8
## 844   2020-06-27               South East      8
## 845   2020-06-28               South East      6
## 846   2020-06-29               South East      5
## 847   2020-06-30               South East      5
## 848   2020-07-01               South East      2
## 849   2020-07-02               South East      7
## 850   2020-07-03               South East      3
## 851   2020-07-04               South East      6
## 852   2020-07-05               South East      4
## 853   2020-07-06               South East      4
## 854   2020-07-07               South East      6
## 855   2020-07-08               South East      3
## 856   2020-07-09               South East      7
## 857   2020-07-10               South East      3
## 858   2020-07-11               South East      3
## 859   2020-07-12               South East      4
## 860   2020-07-13               South East      4
## 861   2020-07-14               South East      5
## 862   2020-07-15               South East      5
## 863   2020-07-16               South East      3
## 864   2020-07-17               South East      1
## 865   2020-07-18               South East      4
## 866   2020-07-19               South East      2
## 867   2020-07-20               South East      2
## 868   2020-07-21               South East      3
## 869   2020-07-22               South East      2
## 870   2020-07-23               South East      0
## 871   2020-03-01               South West      0
## 872   2020-03-02               South West      0
## 873   2020-03-03               South West      0
## 874   2020-03-04               South West      0
## 875   2020-03-05               South West      0
## 876   2020-03-06               South West      0
## 877   2020-03-07               South West      0
## 878   2020-03-08               South West      0
## 879   2020-03-09               South West      0
## 880   2020-03-10               South West      0
## 881   2020-03-11               South West      1
## 882   2020-03-12               South West      0
## 883   2020-03-13               South West      0
## 884   2020-03-14               South West      1
## 885   2020-03-15               South West      0
## 886   2020-03-16               South West      0
## 887   2020-03-17               South West      2
## 888   2020-03-18               South West      2
## 889   2020-03-19               South West      4
## 890   2020-03-20               South West      3
## 891   2020-03-21               South West      6
## 892   2020-03-22               South West      7
## 893   2020-03-23               South West      8
## 894   2020-03-24               South West      7
## 895   2020-03-25               South West      9
## 896   2020-03-26               South West     11
## 897   2020-03-27               South West     13
## 898   2020-03-28               South West     21
## 899   2020-03-29               South West     18
## 900   2020-03-30               South West     23
## 901   2020-03-31               South West     23
## 902   2020-04-01               South West     21
## 903   2020-04-02               South West     23
## 904   2020-04-03               South West     30
## 905   2020-04-04               South West     42
## 906   2020-04-05               South West     32
## 907   2020-04-06               South West     34
## 908   2020-04-07               South West     39
## 909   2020-04-08               South West     47
## 910   2020-04-09               South West     24
## 911   2020-04-10               South West     46
## 912   2020-04-11               South West     43
## 913   2020-04-12               South West     23
## 914   2020-04-13               South West     27
## 915   2020-04-14               South West     24
## 916   2020-04-15               South West     32
## 917   2020-04-16               South West     29
## 918   2020-04-17               South West     33
## 919   2020-04-18               South West     25
## 920   2020-04-19               South West     31
## 921   2020-04-20               South West     26
## 922   2020-04-21               South West     26
## 923   2020-04-22               South West     23
## 924   2020-04-23               South West     17
## 925   2020-04-24               South West     19
## 926   2020-04-25               South West     15
## 927   2020-04-26               South West     27
## 928   2020-04-27               South West     13
## 929   2020-04-28               South West     17
## 930   2020-04-29               South West     15
## 931   2020-04-30               South West     26
## 932   2020-05-01               South West      6
## 933   2020-05-02               South West      7
## 934   2020-05-03               South West     10
## 935   2020-05-04               South West     17
## 936   2020-05-05               South West     14
## 937   2020-05-06               South West     19
## 938   2020-05-07               South West     16
## 939   2020-05-08               South West      6
## 940   2020-05-09               South West     11
## 941   2020-05-10               South West      5
## 942   2020-05-11               South West      8
## 943   2020-05-12               South West      7
## 944   2020-05-13               South West      7
## 945   2020-05-14               South West      6
## 946   2020-05-15               South West      4
## 947   2020-05-16               South West      4
## 948   2020-05-17               South West      6
## 949   2020-05-18               South West      4
## 950   2020-05-19               South West      6
## 951   2020-05-20               South West      1
## 952   2020-05-21               South West      9
## 953   2020-05-22               South West      6
## 954   2020-05-23               South West      6
## 955   2020-05-24               South West      3
## 956   2020-05-25               South West      8
## 957   2020-05-26               South West     11
## 958   2020-05-27               South West      5
## 959   2020-05-28               South West     10
## 960   2020-05-29               South West      7
## 961   2020-05-30               South West      3
## 962   2020-05-31               South West      2
## 963   2020-06-01               South West      7
## 964   2020-06-02               South West      2
## 965   2020-06-03               South West      7
## 966   2020-06-04               South West      2
## 967   2020-06-05               South West      2
## 968   2020-06-06               South West      1
## 969   2020-06-07               South West      3
## 970   2020-06-08               South West      3
## 971   2020-06-09               South West      0
## 972   2020-06-10               South West      1
## 973   2020-06-11               South West      2
## 974   2020-06-12               South West      2
## 975   2020-06-13               South West      2
## 976   2020-06-14               South West      0
## 977   2020-06-15               South West      2
## 978   2020-06-16               South West      2
## 979   2020-06-17               South West      0
## 980   2020-06-18               South West      0
## 981   2020-06-19               South West      0
## 982   2020-06-20               South West      2
## 983   2020-06-21               South West      0
## 984   2020-06-22               South West      1
## 985   2020-06-23               South West      1
## 986   2020-06-24               South West      1
## 987   2020-06-25               South West      0
## 988   2020-06-26               South West      3
## 989   2020-06-27               South West      0
## 990   2020-06-28               South West      0
## 991   2020-06-29               South West      1
## 992   2020-06-30               South West      0
## 993   2020-07-01               South West      0
## 994   2020-07-02               South West      0
## 995   2020-07-03               South West      0
## 996   2020-07-04               South West      0
## 997   2020-07-05               South West      1
## 998   2020-07-06               South West      0
## 999   2020-07-07               South West      0
## 1000  2020-07-08               South West      2
## 1001  2020-07-09               South West      0
## 1002  2020-07-10               South West      1
## 1003  2020-07-11               South West      0
## 1004  2020-07-12               South West      0
## 1005  2020-07-13               South West      1
## 1006  2020-07-14               South West      0
## 1007  2020-07-15               South West      0
## 1008  2020-07-16               South West      0
## 1009  2020-07-17               South West      1
## 1010  2020-07-18               South West      0
## 1011  2020-07-19               South West      0
## 1012  2020-07-20               South West      0
## 1013  2020-07-21               South West      0
## 1014  2020-07-22               South West      0
## 1015  2020-07-23               South West      0

1.5 Completion date

We extract the completion date from the NHS Pathways file timestamp:


database_date <- attr(x, "timestamp")
database_date
## [1] "2020-07-23"

The completion date of the NHS Pathways data is Thursday 23 Jul 2020.

1.6 Auxiliary functions

These are functions which will be used further in the analyses.

Function to estimate the generalised R-squared as the proportion of deviance explained by a given model:


## Function to calculate R2 for Poisson model
## not adjusted for model complexity but all models have the same DF here

Rsq <- function(x) {
  1 - (x$deviance / x$null.deviance)
}

Function to extract growth rates per region as well as halving times, and the associated 95% confidence intervals:


## function to extract the coefficients, find the level of the intercept,
## reconstruct the values of r, get confidence intervals

get_r <- function(model) {
  ##  extract coefficients and conf int
  out <- data.frame(r = coef(model))  %>%
    rownames_to_column("var") %>% 
    cbind(confint(model)) %>%
    filter(!grepl("day_of_week", var)) %>% 
    filter(grepl("day", var)) %>%
    rename(lower_95 = "2.5 %",
           upper_95 = "97.5 %") %>%
    mutate(var = sub("day:", "", var))
  
  ## reconstruct values: intercept + region-coefficient
  for (i in 2:nrow(out)) {
    out[i, -1] <- out[1, -1] + out[i, -1]
  }
  
  ## find the name of the intercept, restore regions names
  out <- out %>%
    mutate(nhs_region = model$xlevels$nhs_region) %>%
    select(nhs_region, everything(), -var)
  
  ## find halving times
  halving <- log(0.5) / out[,-1] %>%
    rename(halving_t = r,
           halving_t_lower_95 = lower_95,
           halving_t_upper_95 = upper_95)
  
  ## set halving times with exclusion intervals to NA
  no_halving <- out$lower_95 < 0 & out$upper_95 > 0
  halving[no_halving, ] <- NA_real_
  
  ## return all data
  cbind(out, halving)
  
}

Functions used in the correlation analysis between NHS Pathways reports and deaths:

## Function to calculate Pearson's correlation between deaths and lagged
## reports. Note that `pearson` can be replaced with `spearman` for rank
## correlation.

getcor <- function(x, ndx) {
  return(cor(x$deaths[ndx],
             x$note_lag[ndx],
             use = "complete.obs",
             method = "pearson"))
}

## Catch if sample size throws an error
getcor2 <- possibly(getcor, otherwise = NA)

getboot <- function(x) {
  result <- boot::boot.ci(boot::boot(x, getcor2, R = 1000), 
                           type = "bca")
  return(data.frame(n = sum(!is.na(x$note_lag) & !is.na(x$deaths)),
                    r = result$t0,
                    r_low = result$bca[4],
                    r_hi = result$bca[5]))
}

Function to classify the day of the week into weekend, Monday, and the rest:


## Fn to add day of week
day_of_week <- function(df) {
  df %>% 
    dplyr::mutate(day_of_week = lubridate::wday(date, label = TRUE)) %>% 
    dplyr::mutate(day_of_week = dplyr::case_when(
      day_of_week %in% c("Sat", "Sun") ~ "weekend",
      day_of_week %in% c("Mon") ~ "monday",
      !(day_of_week %in% c("Sat", "Sun", "Mon")) ~ "rest_of_week"
    ) %>% 
      factor(levels = c("rest_of_week", "monday", "weekend")))
}

Custom color palettes, color scales, and vectors of colors:


pal <- c("#006212",
         "#ae3cab",
         "#00db90",
         "#960c00",
         "#55aaff",
         "#ff7e78",
         "#00388d")

age.pal <- viridis::viridis(3,begin = 0.1, end = 0.7)

3 Comparison with deaths time series

3.1 Outline

We want to explore the correlation between NHS Pathways reports and deaths, and assess the potential for reports to be used as an early warning system for disease resurgence.

Death data are publically available. We truncate the time series to avoid bias from reporting delay - we assume a conservative delay of three weeks.

3.2 Lagged correlation

We calculate Pearson’s correlation coefficient between deaths and NHS Pathways notifications using different lags. Confidence intervals are obtained using bootstrap. Note that results were also confirmed using Spearman’s rank correlation.

First we join the NHS Pathways and death data, and aggregate over all England:

## truncate death data for reporting delay
trunc_date <- max(dth$date_report) - delay_max

dth_trunc <- dth %>%
  rename(date = date_report) %>%
  filter(date <= trunc_date) 

## join with notification data
all_data <- x %>% 
  filter(!is.na(nhs_region)) %>%
  group_by(date, nhs_region) %>%
  summarise(count = sum(count, na.rm = T)) %>%
  ungroup %>%
  inner_join(dth_trunc,
             by = c("date","nhs_region"))

all_tot <- all_data %>%
  group_by(date) %>%
  summarise(count = sum(count, na.rm = TRUE),
            deaths = sum(deaths, na.rm = TRUE)) 

We calculate correlation with lagged NHS Pathways reports from 0 to 30 days behind deaths:


## Calculate all correlations + bootstrap CIs
lag_cor <- data.frame()
for (i in 0:30) {
  
  ## lag reports
  summary <- all_tot %>% 
    mutate(note_lag = lag(count, i)) %>%
    ## calculate rank correlation and bootstrap CI
    getboot(.) %>%
    mutate(lag = i)

  lag_cor <- bind_rows(lag_cor, summary)
}

cor_vs_lag <- ggplot(lag_cor, aes(lag, r)) +
  theme_bw() +
  geom_ribbon(aes(ymin = r_low, ymax = r_hi), alpha = 0.2) +
  geom_hline(yintercept = 0, lty = "longdash") +
  geom_point() +
  geom_line() +
  labs(x = "Lag between NHS pathways and death data (days)",
       y = "Pearson's correlation") +
  large_txt
cor_vs_lag


l_opt <- which.max(lag_cor$r)

This analysis suggests that the best lag is 23 days. We then compare and plot the number of deaths reported against the number of NHS Pathways reports lagged by 23 days.


all_tot <- all_tot %>%
  rename(date_death = date) %>%
  mutate(note_lag = lag(count, lag_cor$lag[l_opt]),
         note_lag_c = (note_lag - mean(note_lag, na.rm = T)),
         date_note = lag(date_death,16))

lag_mod <- glm(deaths ~ note_lag, data = all_tot, family = "quasipoisson")

summary(lag_mod)
## 
## Call:
## glm(formula = deaths ~ note_lag, family = "quasipoisson", data = all_tot)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -14.2551   -4.9887   -0.5524    3.8414    9.0784  
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 4.509e+00  6.804e-02   66.27   <2e-16 ***
## note_lag    1.525e-05  7.101e-07   21.48   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for quasipoisson family taken to be 28.02609)
## 
##     Null deviance: 14142.2  on 83  degrees of freedom
## Residual deviance:  2454.7  on 82  degrees of freedom
##   (23 observations deleted due to missingness)
## AIC: NA
## 
## Number of Fisher Scoring iterations: 4

exp(coefficients(lag_mod))
## (Intercept)    note_lag 
##   90.815916    1.000015
exp(confint(lag_mod))
##                 2.5 %     97.5 %
## (Intercept) 79.297875 103.543695
## note_lag     1.000014   1.000017

Rsq(lag_mod)
## [1] 0.8264244

mod_fit <- as.data.frame(predict(lag_mod, type = "link", se.fit = TRUE)[1:2])

all_tot_pred <- 
  all_tot %>%
  filter(!is.na(note_lag)) %>%
  mutate(pred = mod_fit$fit,
         pred.se = mod_fit$se.fit,
         low = exp(pred - 1.96*pred.se),
         hi = exp(pred + 1.96*pred.se))


glm_fit <- all_tot_pred %>% 
    filter(!is.na(note_lag)) %>%
  ggplot(aes(x = note_lag, y = deaths)) +
  geom_point() + 
  geom_line(aes(y = exp(pred))) + 
  geom_ribbon(aes(ymin = low, ymax = hi), alpha = 0.3, col = "grey") +
  theme_bw() +
  labs(y = "Daily number of\ndeaths reported",
       x = "Daily number of NHS Pathways reports") +
  large_txt

glm_fit

4 Supplementary figures

4.1 Serial interval distribution

This is a comparison of gamma versus lognormal distribution for the serial interval used to convert r to R in our analysis. Both distributions are parameterised with mean 4.7 and standard deviation 2.9.

SI_param <- epitrix::gamma_mucv2shapescale(4.7, 2.9/4.7)
SI_distribution <- distcrete::distcrete("gamma", interval = 1,
                                        shape = SI_param$shape,
                                        scale = SI_param$scale, w = 0.5)

SI_distribution2 <- distcrete::distcrete("lnorm", interval = 1,
                                        meanlog = log(4.7),
                                        sdlog = log(2.9), w = 0.5)

SI_dist1 <- data.frame(x = SI_distribution$r(1e5)) 
SI_dist1 <- count(SI_dist1, x) %>%
    ggplot() +
    geom_col(aes(x = x, y = n)) +
    labs(x = "Serial interval (days)", y = "Frequency") +
    scale_x_continuous(breaks = seq(0, 30, 5)) +
    theme_bw()

SI_dist2 <- data.frame(x = SI_distribution2$r(1e5)) 
SI_dist2 <- count(SI_dist2, x) %>%
    ggplot() +
    geom_col(aes(x = x, y = n)) +
    labs(x = "Serial interval (days)", y = "Frequency") +
    scale_x_continuous(breaks = seq(0, 200, 20), limits = c(0, 200)) +
    theme_bw()


ggpubr::ggarrange(SI_dist1,
                  SI_dist2,
                  nrow = 1,
                  labels = "AUTO") 

4.2 Sensitivity analysis - 7 or 21 days moving window

We reproduce the window analysis with either a 7 or 21 days window for sensitivity purposes.

First with the 7 days window:

## set moving time window (1/2/3 weeks)
w <- 7

# create empty df
r_all_sliding_7days <- NULL

## make data for model
x_model_all_moving <- x %>%
  filter(!is.na(nhs_region)) %>% 
  group_by(date, nhs_region) %>%
  summarise(n = sum(count)) 

unique_dates <- unique(x_model_all_moving$date)

for (i in 1:(length(unique_dates) - w)) {
  
  date_i <- unique_dates[i]
  
  date_i_max <- date_i + w
  
  model_data <- x_model_all_moving %>%
    filter(date >= date_i & date < date_i_max) %>%
    mutate(day = as.integer(date - date_i)) %>% 
    day_of_week()
  
  
  mod <- glm(n ~ day * nhs_region + day_of_week,
             data = model_data,
             family = 'quasipoisson')
  
  # get growth rate
  r <- get_r(mod)
  r$w_min <- date_i
  r$w_max <- date_i_max
  
  # combine all estimates
  r_all_sliding_7days <- bind_rows(r_all_sliding_7days, r)
  
}

#serial interval distribution
SI_param = epitrix::gamma_mucv2shapescale(4.7, 2.9/4.7)
SI_distribution <- distcrete::distcrete("gamma", interval = 1,
                                        shape = SI_param$shape,
                                        scale = SI_param$scale,
                                        w = 0.5)

#convert growth rates r to R0
r_all_sliding_7days <- r_all_sliding_7days %>%
  mutate(R = epitrix::r2R0(r, SI_distribution),
         R_lower_95 = epitrix::r2R0(lower_95, SI_distribution),
         R_upper_95 = epitrix::r2R0(upper_95, SI_distribution))
# plot
plot_growth <-
  r_all_sliding_7days %>%
  ggplot(aes(x = w_max, y = r)) +
  geom_ribbon(aes(ymin = lower_95, ymax = upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0.5,0.5, "cm")) +
  guides(colour = guide_legend(title = "",override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "",
       y = "Estimated daily growth rate (r)") +
  scale_colour_manual(values = pal)
plot_R <- r_all_sliding_7days %>%
  ggplot(aes(x = w_max, y = R)) +
  geom_ribbon(aes(ymin = R_lower_95, ymax = R_upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(yintercept = 1, linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0.5,0.5, "cm")) +
  guides(color = guide_legend(title = "", override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "",
       y = "Estimated effective reproduction\nnumber (Re)") +
  scale_colour_manual(values = pal)

R <- r_all_sliding_7days %>%
  mutate(lower_95 = R_lower_95, 
         upper_95 = R_upper_95,
         value = R,
         measure = "R",
         reference = 1)

r_R <- r_all_sliding_7days %>%
  mutate(measure = "r",
         value = r,
         reference = 0) %>%
  bind_rows(R)

r_R_7 <- r_R %>%
  ggplot(aes(x = w_max, y = value)) +
  geom_ribbon(aes(ymin = lower_95, ymax = upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(aes(yintercept = reference), linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0,0, "cm"),
        strip.background = element_blank(),
        strip.placement = "outside"
  ) +
  guides(color = guide_legend(title = "", override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "", y = "") +
  scale_colour_manual(values = pal) +
  facet_grid(rows = vars(measure),
             scales = "free_y",
             switch = "y",
             labeller = as_labeller(c(r = "Daily growth rate (r)",
                                      R = "Effective reproduction\nnumber (Re)")))

Then with the 21 days window:

## set moving time window (1/2/3 weeks)
w <- 21

# create empty df
r_all_sliding_21days <- NULL

## make data for model
x_model_all_moving <- x %>%
  filter(!is.na(nhs_region)) %>% 
  group_by(date, nhs_region) %>%
  summarise(n = sum(count)) 

unique_dates <- unique(x_model_all_moving$date)

for (i in 1:(length(unique_dates) - w)) {
  
  date_i <- unique_dates[i]
  
  date_i_max <- date_i + w
  
  model_data <- x_model_all_moving %>%
    filter(date >= date_i & date < date_i_max) %>%
    mutate(day = as.integer(date - date_i)) %>% 
    day_of_week()
  
  
  mod <- glm(n ~ day * nhs_region + day_of_week,
             data = model_data,
             family = 'quasipoisson')
  
  # get growth rate
  r <- get_r(mod)
  r$w_min <- date_i
  r$w_max <- date_i_max
  
  # combine all estimates
  r_all_sliding_21days <- bind_rows(r_all_sliding_21days, r)
  
}

#serial interval distribution
SI_param = epitrix::gamma_mucv2shapescale(4.7, 2.9/4.7)
SI_distribution <- distcrete::distcrete("gamma", interval = 1,
                                        shape = SI_param$shape,
                                        scale = SI_param$scale,
                                        w = 0.5)

#convert growth rates r to R0
r_all_sliding_21days <- r_all_sliding_21days %>%
  mutate(R = epitrix::r2R0(r, SI_distribution),
         R_lower_95 = epitrix::r2R0(lower_95, SI_distribution),
         R_upper_95 = epitrix::r2R0(upper_95, SI_distribution))
# plot
plot_growth <-
  r_all_sliding_21days %>%
  ggplot(aes(x = w_max, y = r)) +
  geom_ribbon(aes(ymin = lower_95, ymax = upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0.5,0.5, "cm")) +
  guides(colour = guide_legend(title = "",override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "",
       y = "Estimated daily growth rate (r)") +
  scale_colour_manual(values = pal)
# plot
plot_R <-
  r_all_sliding_21days %>%
  ggplot(aes(x = w_max, y = R)) +
  geom_ribbon(aes(ymin = R_lower_95, ymax = R_upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(yintercept = 1, linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0.5,0.5, "cm")) +
  guides(color = guide_legend(title = "", override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "",
       y = "Estimated effective reproduction\nnumber (Re)") +
  scale_colour_manual(values = pal)

R <- r_all_sliding_21days %>%
  mutate(lower_95 = R_lower_95, 
         upper_95 = R_upper_95,
         value = R,
         measure = "R",
         reference = 1)

r_R <- r_all_sliding_21days %>%
  mutate(measure = "r",
         value = r,
         reference = 0) %>%
  bind_rows(R)

r_R_21 <- r_R %>%
  ggplot(aes(x = w_max, y = value)) +
  geom_ribbon(aes(ymin = lower_95, ymax = upper_95, fill = nhs_region), alpha = 0.1) +
  geom_line(aes(colour = nhs_region)) +
  geom_point(aes(colour = nhs_region)) +
  geom_hline(aes(yintercept = reference), linetype = "dashed") +
  theme_bw() +
  scale_weeks +
  theme(legend.position = "bottom",
        plot.margin = margin(0.5,1,0,0, "cm"),
        strip.background = element_blank(),
        strip.placement = "outside"
  ) +
  guides(color = guide_legend(title = "", override.aes = list(fill = NA)), fill = FALSE) +
  labs(x = "", y = "") +
  scale_colour_manual(values = pal) +
  facet_grid(rows = vars(measure),
             scales = "free_y",
             switch = "y",
             labeller = as_labeller(c(r = "Daily growth rate (r)",
                                      R = "Effective reproduction\nnumber (Re)")))

And we combine both outputs into a single plot:


ggpubr::ggarrange(r_R_7,
                  r_R_21,
                  nrow = 2,
                  labels = "AUTO",
                  common.legend = TRUE,
                  legend = "bottom") 

4.3 Correlation between NHS Pathways reports and deaths by NHS region


lag_cor_reg <- data.frame()

for (i in 0:30) {

  summary <-
    all_data %>%
    group_by(nhs_region) %>%
    mutate(note_lag = lag(count, i)) %>%
    ## calculate rank correlation and bootstrap CI for each region
    group_modify(~getboot(.x)) %>%
    mutate(lag = i)
  
  lag_cor_reg <- bind_rows(lag_cor_reg, summary)
}

cor_vs_lag_reg <- 
lag_cor_reg %>%
ggplot(aes(lag, r, col = nhs_region)) +
  geom_hline(yintercept = 0, lty = "longdash") +
  geom_ribbon(aes(ymin = r_low, ymax = r_hi, col = NULL, fill = nhs_region), alpha = 0.2) +
  geom_point() +
  geom_line() +
  facet_wrap(~nhs_region) +
  scale_color_manual(values = pal) +
  scale_fill_manual(values = pal, guide = F) +  
  theme_bw() +
  labs(x = "Lag between NHS pathways and death data (days)", y = "Pearson's correlation", col = "NHS region") +
  theme(legend.position = "bottom") +
  guides(color = guide_legend(override.aes = list(fill = NA)))

cor_vs_lag_reg

5 Export data

We save the tables created during our analysis:


if (!dir.exists("excel_tables")) {
  dir.create("excel_tables")
}


## list all tables, and loop over export
tables_to_export <- c("r_all_sliding", "lag_cor")

for (e in tables_to_export) {
  rio::export(get(e),
              file.path("excel_tables",
                        paste0(e, ".xlsx")))
}

## also export result from regression on lagged data 
rio::export(lag_mod, file.path("excel_tables", "lag_mod.rds"))

6 System information

6.1 Outline

The following information documents the system on which the document was compiled.

6.2 System

This provides information on the operating system.

Sys.info()
##                                                                                            sysname 
##                                                                                           "Darwin" 
##                                                                                            release 
##                                                                                           "19.6.0" 
##                                                                                            version 
## "Darwin Kernel Version 19.6.0: Sun Jul  5 00:43:10 PDT 2020; root:xnu-6153.141.1~9/RELEASE_X86_64" 
##                                                                                           nodename 
##                                                                                "Mac-1595670031938" 
##                                                                                            machine 
##                                                                                           "x86_64" 
##                                                                                              login 
##                                                                                             "root" 
##                                                                                               user 
##                                                                                           "runner" 
##                                                                                     effective_user 
##                                                                                           "runner"

6.3 R environment

This provides information on the version of R used:

R.version
##                _                           
## platform       x86_64-apple-darwin17.0     
## arch           x86_64                      
## os             darwin17.0                  
## system         x86_64, darwin17.0          
## status                                     
## major          4                           
## minor          0.2                         
## year           2020                        
## month          06                          
## day            22                          
## svn rev        78730                       
## language       R                           
## version.string R version 4.0.2 (2020-06-22)
## nickname       Taking Off Again

6.4 R packages

This provides information on the packages used:

sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Catalina 10.15.6
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] ggnewscale_0.4.1     ggpubr_0.4.0         lubridate_1.7.9     
##  [4] chngpt_2020.5-21     cyphr_1.1.0          DT_0.14             
##  [7] kableExtra_1.1.0     janitor_2.0.1        remotes_2.2.0       
## [10] projections_0.5.1    earlyR_0.0.1         epitrix_0.2.2       
## [13] distcrete_1.0.3      incidence_1.7.2      rio_0.5.16          
## [16] reshape2_1.4.4       rvest_0.3.5          xml2_1.3.2          
## [19] linelist_0.0.40.9000 forcats_0.5.0        stringr_1.4.0       
## [22] dplyr_1.0.0          purrr_0.3.4          readr_1.3.1         
## [25] tidyr_1.1.0          tibble_3.0.3         ggplot2_3.3.2       
## [28] tidyverse_1.3.0      here_0.1             reportfactory_0.0.5 
## 
## loaded via a namespace (and not attached):
##  [1] nlme_3.1-148      fs_1.4.2          webshot_0.5.2     httr_1.4.2       
##  [5] rprojroot_1.3-2   tools_4.0.2       backports_1.1.8   utf8_1.1.4       
##  [9] R6_2.4.1          mgcv_1.8-31       DBI_1.1.0         colorspace_1.4-1 
## [13] withr_2.2.0       gridExtra_2.3     tidyselect_1.1.0  sodium_1.1       
## [17] curl_4.3          compiler_4.0.2    cli_2.0.2         labeling_0.3     
## [21] matchmaker_0.1.1  scales_1.1.1      digest_0.6.25     foreign_0.8-80   
## [25] rmarkdown_2.3     pkgconfig_2.0.3   htmltools_0.5.0   dbplyr_1.4.4     
## [29] htmlwidgets_1.5.1 rlang_0.4.7       readxl_1.3.1      rstudioapi_0.11  
## [33] farver_2.0.3      generics_0.0.2    jsonlite_1.7.0    crosstalk_1.1.0.1
## [37] car_3.0-8         zip_2.0.4         magrittr_1.5      kyotil_2019.11-22
## [41] Matrix_1.2-18     Rcpp_1.0.5        munsell_0.5.0     fansi_0.4.1      
## [45] viridis_0.5.1     abind_1.4-5       lifecycle_0.2.0   stringi_1.4.6    
## [49] yaml_2.2.1        carData_3.0-4     snakecase_0.11.0  MASS_7.3-51.6    
## [53] plyr_1.8.6        grid_4.0.2        blob_1.2.1        crayon_1.3.4     
## [57] lattice_0.20-41   cowplot_1.0.0     splines_4.0.2     haven_2.3.1      
## [61] hms_0.5.3         knitr_1.29        pillar_1.4.6      boot_1.3-25      
## [65] ggsignif_0.6.0    reprex_0.3.0      glue_1.4.1        evaluate_0.14    
## [69] data.table_1.13.0 modelr_0.1.8      vctrs_0.3.2       selectr_0.4-2    
## [73] cellranger_1.1.0  gtable_0.3.0      assertthat_0.2.1  xfun_0.16        
## [77] openxlsx_4.1.5    broom_0.7.0       rstatix_0.6.0     survival_3.1-12  
## [81] viridisLite_0.3.0 ellipsis_0.3.1